iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
Software Development

從Servlet到Spring MVC系列 第 18

Day17 Servlet - Listener

  • 分享至 

  • xImage
  •  

前言

在Tomcat運行時你總會希望當Tomcat做什麼的時候它可以順便幫你做點什麼,最常見的莫過當ServletContext建立的時候也順便建立DB連線池資訊,讓你的服務一運行就有DB物件可供調用。

0、創建module

請參考Day05創建module

一、Event and Listener

Java EE定義了Event讓container中的物件在不同的生命週期時發布event讓註冊的對應事件的監聽器可以進行執行預定的行為,以下是在官方文件中整理出來的事件與監聽器:

(1) Event

  1. javax.servlet.ServletRequestEvent
  2. javax.servlet.ServletRequestAttributeEvent
  3. javax.servlet.ServletContextEvent
  4. javax.servlet.ServletContextAttributeEvent
  5. javax.servlet.http.HttpSessionEvent
  6. javax.servlet.http.HttpSessionBindingEvent
  7. javax.servlet.AsyncEvent

(2) Listener

  1. ServletRequestListener
    監聽ServletRequest物件創見與銷毀
  2. ServletRequestAttributeListener
    監聽ServletRequest物件添加、刪除或取代Attribute
  3. ServletContextListener
    監聽ServletContext物件創見與銷毀
  4. ServletContextAttributeListener
    監聽ServletRequest物件添加、刪除或取代Attribute
  5. HttpSessionListener
    監聽HttpSession物件創見與銷毀
  6. HttpSessionAttributeListener
    監聽ServletRequest物件添加、刪除或取代Attribute
  7. HttpSessionBindingListener
    監聽HttpSession物件添加或移除Listener
  8. HttpSessionActivationListener
    監聽HttpSession被序列化與反序列化
  9. AsyncListener
    監聽非同步Servlet的開始、完成、error、timeout

(3) 配置Listener

web.xml

  <listener>
    <listener-class>com.swj.xml.DemoListener</listener-class>
  </listener>

或是適用annotation

@WebListener

Demo

以下Demo ServletContextListener、ServletContextAttributeListener,其餘使用類似

@WebListener
public class DemoListener implements ServletContextListener, ServletContextAttributeListener {
    //ServletContextListener
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("ServletContext初始化好了");
    }
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContext銷毀了");
    }

    //ServletContextAttributeListener
    @Override
    public void attributeAdded(ServletContextAttributeEvent event) {
        System.out.println("添加屬性:"+ event.getName()+",屬性值:"+event.getValue());
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent event) {
        System.out.println("移除屬性:"+ event.getName()+",屬性值:"+event.getValue());
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent event) {
        System.out.println("取代屬性:"+ event.getName()+",屬性值:"+event.getValue());
    }
}

DemoServlet

@WebServlet("/DemoServlet")
public class DemoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        getServletContext().setAttribute("msg", "Hello World1111");
        getServletContext().setAttribute("msg", "Hello World2222");
        getServletContext().removeAttribute("msg");

    }
}

訪問DemoServlet後關閉tomcat
https://ithelp.ithome.com.tw/upload/images/20241002/201280847zUsP2n2tm.png

Reference


上一篇
Day16 Servlet - Filter
下一篇
Day18 Servlet - File Upload and File Download
系列文
從Servlet到Spring MVC36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言